home *** CD-ROM | disk | FTP | other *** search
- unit uMaker;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ExtCtrls, uGLobals, StdCtrls, ExtDlgs, jpeg, ComCtrls, Menus, ActnList,
- ToolWin;
-
- type
- TForm1 = class(TForm)
- ListFiles: TListBox;
- Splitter1: TSplitter;
- Panel1: TPanel;
- Panel2: TPanel;
- Panel3: TPanel;
- Panel4: TPanel;
- Panel5: TPanel;
- Splitter2: TSplitter;
- Splitter3: TSplitter;
- Splitter4: TSplitter;
- Splitter5: TSplitter;
- OpenScr: TOpenDialog;
- SaveScr: TSaveDialog;
- OpenPic: TOpenPictureDialog;
- Panel8: TPanel;
- ImagePreview: TImage;
- StatusBar: TStatusBar;
- ActionList: TActionList;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- List1: TMenuItem;
- CreateNewScreensaver1: TMenuItem;
- LoadExistingScreensaver1: TMenuItem;
- NewScreensaver1: TMenuItem;
- N1: TMenuItem;
- N2: TMenuItem;
- Exit1: TMenuItem;
- AddImage1: TMenuItem;
- DeleteImage1: TMenuItem;
- N3: TMenuItem;
- MoveUp1: TMenuItem;
- MoveDown1: TMenuItem;
- ActionNew: TAction;
- ActionBuild: TAction;
- ActionLoad: TAction;
- ActionAddImage: TAction;
- ActionDeleteImage: TAction;
- ActionUp: TAction;
- ActionDown: TAction;
- Panel6: TPanel;
- eText: TEdit;
- procedure btnExitClick(Sender: TObject);
- procedure btnAddClick(Sender: TObject);
- procedure ListFilesClick(Sender: TObject);
- procedure btnDeleteClick(Sender: TObject);
- procedure btnUpClick(Sender: TObject);
- procedure btnDownClick(Sender: TObject);
- procedure btnCreateClick(Sender: TObject);
- procedure btnLoadClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure btnNewClick(Sender: TObject);
- private
- TempPath : string;
- OldName : String;
- CurrentFilename : string;
- FilesToDelete : TStringList;
- pb : TProgressBar;
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.btnExitClick(Sender: TObject);
- begin
- Application.Terminate;
- end;
-
- procedure TForm1.btnAddClick(Sender: TObject);
- var
- i : integer;
- begin
- if OpenPic.Execute then
- begin
- for i := 0 to OpenPic.Files.Count-1 do
- ListFiles.Items.Add(OpenPic.Files[i]);
- end;
- if (ListFiles.ItemIndex = -1) and (ListFiles.Items.Count > 0) then
- begin
- if ListFiles.ItemIndex > 0 then
- OldName := ListFiles.Items[ListFiles.ItemIndex];
- ListFiles.ItemIndex := 0;
- if OldName <> ListFiles.Items[ListFiles.ItemIndex] then
- ListFilesClick(ListFiles);
- end;
- ActionBuild.Enabled := True;
- end;
-
- procedure TForm1.ListFilesClick(Sender: TObject);
- begin
- if ListFiles.ItemIndex >=0 then
- begin
- ImagePreview.Visible := False;
- ImagePreview.Picture.LoadFromFile(ListFiles.Items[ListFiles.ItemIndex]);
- ImagePreview.Visible := True;
- ActionDeleteImage.Enabled := True;
- ActionUp.Enabled := True;
- ActionDown.Enabled := True;
- end else
- begin
- ActionDeleteImage.Enabled := False;
- ActionUp.Enabled := False;
- ActionDown.Enabled := False;
- end;
- end;
-
- procedure TForm1.btnDeleteClick(Sender: TObject);
- var
- i : integer;
- begin
- i := ListFiles.ItemIndex;
- if ListFiles.ItemIndex >= 0 then
- ListFiles.Items.Delete(i);
- if i > ListFiles.Items.Count-1 then
- dec(i);
- if i > ListFiles.Items.Count-1 then
- i := -1;
- if ListFiles.ItemIndex > 0 then
- OldName := ListFiles.Items[ListFiles.ItemIndex];
- ListFiles.ItemIndex := i;
- if OldName <> ListFiles.Items[ListFiles.ItemIndex] then
- ListFilesClick(ListFiles);
- ActionBuild.Enabled := True;
- end;
-
- procedure TForm1.btnUpClick(Sender: TObject);
- var
- i : integer;
- begin
- i := ListFiles.ItemIndex-1;
- if i < 0 then
- i := ListFiles.Items.Count-1;
- if ListFiles.ItemIndex >= 0 then
- begin
- ListFiles.Items.Move(ListFiles.ItemIndex,i);
- ListFiles.ItemIndex := i;
- ActionBuild.Enabled := True;
- end;
- end;
-
- procedure TForm1.btnDownClick(Sender: TObject);
- var
- i : integer;
- begin
- i := ListFiles.ItemIndex+1;
- if i = ListFiles.Items.Count then
- i := 0;
- if ListFiles.ItemIndex >= 0 then
- begin
- ListFiles.Items.Move(ListFiles.ItemIndex,i);
- ListFiles.ItemIndex := i;
- ActionBuild.Enabled := True;
- end;
- end;
-
- procedure TForm1.btnCreateClick(Sender: TObject);
- var
- fsSS : TFileStream;
- fsOut : TFileStream;
- i, listloc : integer;
- buf : array[0..19] of Char;
- s : string;
- ssi : TSSImage;
- sil : TSSFileImageLocations;
- bShowText : boolean;
- begin
- if SaveScr.Execute then
- begin
- sil := TSSFileImageLocations.Create(nil);
- fsSS := TFileStream.Create(ExtractFilePath(Application.ExeName)+'ScreenSaver.dat',fmOpenRead or fmShareDenyWrite);
- fsOut := TFileStream.Create(SaveScr.FileName,fmCreate);
- try
- StatusBar.Panels[1].Text := 'Creating...';
- fsOut.CopyFrom(fsSS,fsSS.Size);
- pb.Max := ListFiles.Items.Count -1;
- for i := 0 to ListFiles.Items.Count -1 do
- begin
- pb.Position := i;
- bShowText := not bShowText;
- if bShowText and (eText.Text <> '') then
- begin
- ssi := TSSTextImage.Create(nil);
- TSSTextImage(ssi).Text := eText.Text;
- end else
- begin
- ssi := TSSImage.Create(nil);
- end;
- try
- ssi.Picture.LoadFromFile(ListFiles.Items[i]);
- ssi.Filename := ExtractFileName(ListFiles.Items[i]);
- sil.Add(fsOut.Position);
- fsOut.WriteComponent(ssi);
- finally
- ssi.Free;
- end;
- end;
- listLoc := fsOut.Position;
- fsOut.WriteComponent(sil);
-
- s := IntToStr(fsOut.Size-fsSS.Size);
- while length(s)<20 do
- s := s+' ';
- for i := 0 to 19 do
- buf[i] := s[i+1];
- fsOut.WriteBuffer(Buf,20);
-
- s := IntToStr(listLoc);
- while length(s)<20 do
- s := s+' ';
- for i := 0 to 19 do
- buf[i] := s[i+1];
- fsOut.WriteBuffer(Buf,20);
-
- finally
- sil.Free;
- fsSS.Free;
- fsOut.Free;
- end;
- CurrentFilename := ExtractFileName(SaveScr.Filename);
- end;
- pb.Position := 0;
- StatusBar.Panels[1].Text := CurrentFilename;
- end;
-
- procedure TForm1.btnLoadClick(Sender: TObject);
- var
- fs : TFileStream;
- iListLoc, iMax, iSize, i, j : integer;
- Buf : array[0..19] of Char;
- ssi : TSSImage;
- sil : TSSFileImageLocations;
- begin
- if OpenScr.Execute then
- begin
- if ListFiles.Items.Count > 0 then
- if MessageDlg('Are you sure you wish to load '+OpenScr.Filename+' and clear the current ScreenSaver?',mtConfirmation,[mbYes, mbNo],0)=mrNo then exit;
- ListFiles.Clear;
- ImagePreview.Visible := False;
- sil := TSSFileImageLocations.Create(nil);
- fs := TFileStream.Create( OpenScr.Filename, fmOpenRead or fmShareDenyWrite );
- try
- StatusBar.Panels[1].Text := 'Loading...';
- fs.Position := fs.Size-40;
- j := fs.Read(Buf,20);
- if j <> 20 then exit;
- iSize := StrToIntDef(Trim(buf),0);
-
- j := fs.Read(Buf,20);
- if j <> 20 then exit;
- iListLoc := StrToIntDef(Trim(buf),0);
-
- fs.Position := iListLoc;
- sil := TSSFileImageLocations(fs.ReadComponent(sil));
- iMax := sil.Count;
-
- fs.Position := fs.Size-iSize-40;
-
- pb.Max := iMax-1;
- for i := 0 to iMax-1 do
- begin
- pb.position := i;
- Application.ProcessMessages;
- ssi := TSSImage(fs.ReadComponent(nil));
- try
- TSSImage(ssi).Picture.SaveToFile(TempPath+'~'+TSSImage(ssi).Filename);
- FilesToDelete.Add(TempPath+'~'+TSSImage(ssi).Filename);
- ListFiles.Items.Add(TempPath+'~'+TSSImage(ssi).Filename);
- finally
- TSSImage(ssi).Free;
- end;
- end;
- if ListFiles.Items.Count>0 then
- begin
- ListFiles.ItemIndex := 0;
- ListFilesClick(ListFiles);
- end;
- finally
- fs.free;
- sil.Free;
- end;
- CurrentFilename := ExtractFileName(OpenScr.Filename);
- end;
- pb.position := 0;
- StatusBar.Panels[1].Text := CurrentFilename;
- ActionBuild.Enabled := False;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- FilesToDelete := TStringList.Create;
- TempPath := StringOfChar(' ',MAX_PATH);
- GetTempPath(MAX_PATH,PChar(TempPath));
- TempPath := Trim(TempPath);
- pb := TProgressBar.Create(StatusBar);
- pb.Parent := StatusBar;
- pb.Left := 2;
- pb.Top := 2;
- pb.width := 198;
- pb.height := 17;
- pb.Smooth := True;
- pb.Position := 0;
- CurrentFilename := 'NewScreenSaver.scr';
- StatusBar.Panels[1].Text := CurrentFilename;
- end;
-
- procedure TForm1.FormDestroy(Sender: TObject);
- var
- i : integer;
- begin
- for i := 0 to FilesToDelete.Count-1 do
- DeleteFile(FilesToDelete[i]);
- FilesToDelete.Free;
- end;
-
- procedure TForm1.btnNewClick(Sender: TObject);
- begin
- if ListFiles.Items.Count > 0 then
- begin
- if MessageDlg('Are you sure you wish to clear the current screensaver?',mtConfirmation,[mbYEs, mbNo],0)=mrYes then
- begin
- ListFiles.Clear;
- ImagePreview.Visible := False;
- CurrentFilename := 'NewScreenSaver.scr';
- StatusBar.Panels[1].Text := CurrentFilename;
- end;
- ActionBuild.Enabled := False;
- end;
- end;
-
- end.
-